﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ProgramacionRedes {
    public partial class FormPrincipal : Form {
        Sistema sistema;

        public FormPrincipal() {
            string nombre_archivo = ProgramacionRedes.Properties.Settings.Default.ArchivoPersistenciaUsuarios;
            string ip = ProgramacionRedes.Properties.Settings.Default.IP;
            int puerto = ProgramacionRedes.Properties.Settings.Default.Puerto;

            InitializeComponent();
            sistema = new Sistema(nombre_archivo, ip, puerto);
            sistema.evCantCliChanged += new CantidadClientes_Changed(sistema_evCantCliChanged);
            sistema.evLogChanged += new Log_Changed(sistema_evLogChanged);
        }

        void sistema_evLogChanged(object sender, EventArgs_Log e) {
            if (lbx_Log.InvokeRequired) {
                try {
                    this.Invoke(new Log_Changed(sistema_evLogChanged), sender, e);
                } catch { }
            } else {
                if (lbx_Log.Items.Count == 100) lbx_Log.Items.RemoveAt(0);
                lbx_Log.Items.Add(e.Texto);
            }
        }

        void sistema_evCantCliChanged(object sender, EventArgs_CantidadClientes e) {
            if (txt_CantClientesConectados.InvokeRequired) {
                this.Invoke(new CantidadClientes_Changed(sistema_evCantCliChanged), sender, e);
            } else {
                txt_CantClientesConectados.Text = e.Cantidad.ToString();
            }
        }

        private void btn_Configuracion_Click(object sender, EventArgs e) {
            FormConfiguracion frm = new FormConfiguracion();
            frm.Show();
        }

        private void btn_Usuarios_Click(object sender, EventArgs e) {
            FormUsuarios frm = new FormUsuarios(sistema);
            frm.Show();
        }

        private void btn_Iniciar_Click(object sender, EventArgs e) {
            sistema.Iniciar();
            timer1.Enabled = true;
        }

        private void btn_Terminar_Click(object sender, EventArgs e) {
            sistema.Terminar();
            timer1.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e) {
            List<string> usuarios = sistema.ObtenerUsuariosConectados();
            lbx_UsuariosConectados.Items.Clear();
            lbx_UsuariosConectados.Items.AddRange(usuarios.ToArray());
        }

        private void pbx_BorrarLog_Click(object sender, EventArgs e) {
            lbx_Log.Items.Clear();
        }

        private void pbx_BorrarLog_MouseEnter(object sender, EventArgs e) {
            pbx_BorrarLog.BackColor = Color.DarkGray;
        }

        private void pbx_BorrarLog_MouseLeave(object sender, EventArgs e) {
            pbx_BorrarLog.BackColor = SystemColors.Control;
        }

        private void pbx_BorrarLog_MouseDown(object sender, MouseEventArgs e) {
            pbx_BorrarLog.BackColor = Color.Green;
        }

        private void FormPrincipal_FormClosing(object sender, FormClosingEventArgs e) {
            sistema.Terminar();
        }
    }
}
